//题目:
// 句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。
// 如果某个单词在其中一个句子中恰好出现一次，在另一个句子中却 没有出现 ，那么这个单词就是 不常见的 。
// 给你两个 句子 s1 和 s2 ，返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
#include<iostream>
#include<string>
#include<vector>
#include<unordered_map>

using namespace std;
//代码：
class Solution {
public:
    vector<string> uncommonFromSentences(string s1, string s2) 
    {
        // vector<string> ret;
        // unordered_map<string,int> hash1,hash2;
        // //1.先将句子变成单词
        // vector<string> v_str1,v_str2;
        // v_str1.resize(200),v_str2.resize(200);
        // int i=0;
        // for(const auto& ch:s1)
        // {
        //     if(ch!=' ') v_str1[i]+=ch;
        //     else i++;
        // }
        // v_str1.resize(i+1);
        // i=0;
        // for(const auto& ch:s2)
        // {
        //     if(ch!=' ') v_str2[i]+=ch;
        //     else i++;
        // }
        // v_str2.resize(i+1);
        // for(const auto& str:v_str1)cout<<str<<endl;
        // //2.找出所有的“不常见单词”
        // for(const auto& str1:v_str1)
        //     hash1[str1]++;
        // for(const auto& str2:v_str2)
        //     hash2[str2]++;
        
        // for(const auto& str1:v_str1)
        //     if(hash1[str1]==1 && hash2[str1]==false)//说明：str1在s1仅出现一次 && 不再s2中
        //         ret.push_back(str1);
        // for(const auto& str2:v_str2)
        //     if(hash2[str2]==1 && hash1[str2]==false)//说明：str2在s2仅出现一次 && 不再s1中
        //         ret.push_back(str2);
        // return ret;

        vector<string> ret;
        unordered_map<string,int> hash1,hash2;
        //1.先将句子变成单词
        int left=0,right=0;
        for(int i=0;i<s1.size();i++)
        {
            if(s1[i]!=' ')right++;
            if(s1[i]==' ' || i==s1.size()-1)
            {
                // v_str1.push_back(string(s1.begin()+left,s1.begin()+right));//[left,right)
                hash1[string(s1.begin()+left,s1.begin()+right)]++;
                left=++right;
            }
        }
        left=right=0;
        for(int i=0;i<s2.size();i++)
        {
            if(s2[i]!=' ')right++;
            if(s2[i]==' ' || i==s2.size()-1)
            {
                //[left,right)
                // v_str2.push_back(string(s2.begin()+left,s2.begin()+right));
                hash2[string(s2.begin()+left,s2.begin()+right)]++;
                left=++right;
            }
        }
        for(const auto& pir:hash1)cout<<pir.second<<endl;
        for(const auto& pir:hash2)cout<<pir.second<<endl;
        //2.找出所有的“不常见单词”
        for(const auto& pir:hash1)
            if(pir.second==1 && hash2[pir.first]==0)//说明：str1在s1仅出现一次 && 不再s2中
                ret.push_back(pir.first);
        for(const auto& pir:hash2)
            if(pir.second==1 && hash1[pir.first]==0)//说明：str2在s2仅出现一次 && 不再s1中
                ret.push_back(pir.first);
        return ret;
    }
};